

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using DualControl.ControlMeasures.Dtos;
using DualControl.ControlMeasures;
using DualControl.ControlMeasures.Dtos.CustomMapper;

namespace DualControl.ControlMeasures
{
    /// <summary>
    /// ControlMeasure应用层服务的接口方法
    ///</summary>
    public interface IControlMeasureAppService : IApplicationService
    {


        /// <summary>
        /// 获取按照风险点排列的控制措施列表信息,包含风险点、风险源部分信息
        ///</summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<HSControlMeasureListDto>> GetPagedHSControlMeasure(GetControlMeasuresInput input);


        Task<PagedResultDto<HTCriteriaListDto>> GetPagedHTCriteriaListDto(GetControlMeasuresInput input);


        /// <summary>
        /// 获取ControlMeasure的分页列表信息
        ///</summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<ControlMeasureListDto>> GetPagedControlMeasures(GetControlMeasuresInput input);

		/// <summary>
		/// 通过指定id获取ControlMeasureListDto信息
		/// </summary>
		Task<ControlMeasureListDto> GetControlMeasureByIdAsync(EntityDto<int> input);


        /// <summary>
        /// 导出ControlMeasure为excel表
        /// </summary>
        /// <returns></returns>
		//Task<FileDto> GetControlMeasuresToExcel();

        /// <summary>
        /// 返回实体的EditDto
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<GetControlMeasureForEditOutput> GetControlMeasureForEdit(NullableIdDto<int> input);

        //todo:缺少Dto的生成GetControlMeasureForEditOutput

        //添加控制措施
        Task InsertControlMeasures(int RiskPointId, int HazardSourceId, string[] ControlMeasures);


        /// <summary>
        /// 添加或者修改ControlMeasure的公共方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task CreateOrUpdateControlMeasure(CreateOrUpdateControlMeasureInput input);


        /// <summary>
        /// 删除ControlMeasure信息的方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task DeleteControlMeasure(EntityDto<int> input);


        /// <summary>
        /// 批量删除ControlMeasure
        /// </summary>
        Task BatchDeleteControlMeasuresAsync(List<int> input);


		//// custom codes
		 
        //// custom codes end
    }
}
